package com.zxwl.common.util;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * 泛型工具类
 * @author
 *
 */
public class GenericsUtils {
	/**  
     * 通过反射,获得指定类的父类的泛型参数的实际类型.
     *  
     * @param clazz clazz 需要反射的类,该类必须继承范型父类
     * @return 范型参数的实际类型, 如果没有实现ParameterizedType接口，即不支持泛型，所以直接返回<code>Object.class</code>
     */  
    
	@SuppressWarnings("rawtypes")
	public static Class getSuperClassGenricType(Class clazz) {    
        Type genType = clazz.getGenericSuperclass();//得到泛型父类  
        //如果没有实现ParameterizedType接口，即不支持泛型，直接返回Object.class   
        if (!(genType instanceof ParameterizedType)) {
            return Object.class;   
        }  
        //返回表示此类型实际类型参数的Type对象的数组,数组里放的都是对应类型的Class, 如BuyerServiceBean extends DaoSupport<Buyer,Contact>就返回Buyer和Contact类型   
        Type[] types = ((ParameterizedType) genType).getActualTypeArguments();                   
      
        //如果当前对象是不是类，刚返回Object，否则返回该类
        if (!(types[0] instanceof Class)) {
            return Object.class;   
        }   
        return (Class)types[0];
    }
}

